const axios = require('axios');
const config = require('../config');

class DeepSeekService {
  constructor() {
    this.apiKey = config.deepseek.apiKey;
    this.apiUrl = config.deepseek.apiUrl;
    this.model = config.deepseek.model;
    this.maxTokens = config.deepseek.maxTokens;
    this.temperature = config.deepseek.temperature;
  }

  // 调用DeepSeek API
  async chat(question, context = []) {
    try {
      // 构建系统提示词
      const systemPrompt = `你是一个专业的奶茶店智能客服助手。你需要帮助顾客解答关于奶茶点餐的各种问题。

你的主要职责包括：
1. 解答下单流程相关问题
2. 说明支付方式和流程
3. 解释订单状态和进度
4. 提供客服联系方式
5. 说明配送时间和政策
6. 介绍会员优惠和活动
7. 推荐热门商品
8. 解答健康和安全相关问题

请用友好、专业、简洁的语言回答顾客问题。如果遇到不确定的问题，建议顾客联系人工客服。

当前时间：${new Date().toLocaleString('zh-CN')}`;

      // 构建消息数组
      const messages = [
        {
          role: 'system',
          content: systemPrompt
        }
      ];

      // 添加上下文对话
      if (context && context.length > 0) {
        messages.push(...context);
      }

      // 添加用户当前问题
      messages.push({
        role: 'user',
        content: question
      });

      // 调用DeepSeek API
      const response = await axios.post(this.apiUrl, {
        model: this.model,
        messages: messages,
        max_tokens: this.maxTokens,
        temperature: this.temperature,
        stream: false
      }, {
        headers: {
          'Authorization': `Bearer ${this.apiKey}`,
          'Content-Type': 'application/json'
        },
        timeout: 30000 // 30秒超时
      });

      // 提取回复内容
      const reply = response.data.choices[0].message.content;
      
      return {
        success: true,
        answer: reply,
        usage: response.data.usage
      };

    } catch (error) {
      console.error('DeepSeek API调用失败:', error);
      
      // 根据错误类型返回不同的错误信息
      if (error.response) {
        const status = error.response.status;
        const data = error.response.data;
        
        if (status === 401) {
          return {
            success: false,
            error: 'API密钥无效，请检查配置',
            fallback: true
          };
        } else if (status === 429) {
          return {
            success: false,
            error: 'API调用频率过高，请稍后重试',
            fallback: true
          };
        } else if (status === 500) {
          return {
            success: false,
            error: 'DeepSeek服务暂时不可用',
            fallback: true
          };
        } else {
          return {
            success: false,
            error: `API调用失败: ${data.error?.message || '未知错误'}`,
            fallback: true
          };
        }
      } else if (error.code === 'ECONNABORTED') {
        return {
          success: false,
          error: '请求超时，请稍后重试',
          fallback: true
        };
      } else {
        return {
          success: false,
          error: '网络连接失败，请检查网络',
          fallback: true
        };
      }
    }
  }

  // 检查API密钥是否有效
  async checkApiKey() {
    try {
      const response = await this.chat('你好');
      return response.success;
    } catch (error) {
      return false;
    }
  }

  // 获取API使用统计
  getUsageStats() {
    return {
      model: this.model,
      maxTokens: this.maxTokens,
      temperature: this.temperature
    };
  }
}

module.exports = new DeepSeekService(); 